import { mapGetters } from 'vuex'
import { isArray, isObject } from '@/utils/types.js'

export default {
	computed: {
		...mapGetters({
			calcStatus: 'base/calcStatus'
		})
	},
	methods: {
		getFieldValue(item) {
			if (this.$isEmpty(item.value)) return ''
			const value = item.value

			switch (item.formType) {
				case 'check_status': // 审批状态
					return this.calcStatus(value).label || ''
				case 'map_address': // 地址
					// eslint-disable-next-line no-case-declarations
					const areaStr = value.address.replace(/,/g, '')
					return value.detailAddress.startsWith(areaStr) ? value.detailAddress : (areaStr + value.detailAddress)
				// return value.address.replace(/,/g, '') + value.detailAddress
				case 'contract': // 合同
					if (isArray(value)) {
						return value.map(o => o.contractNum).join('，')
					} else if (isObject(value)) {
						return value.contractNum
					}
					return value
				case 'contacts': // 联系人
					if (isArray(value)) {
						return value.map(o => o.contactsName).join('，')
					} else if (isObject(value)) {
						return value.name
					}
					return value
				case 'business_type': // 商机状态组
					if (this.detailData) {
						return this.detailData.typeName
					}
					return value
				case 'business_status': // 商机阶段
					if ([1, 2, 3].includes(value)) {
						return ['', '赢单', '输单', '无效'][value]
					}
					if (this.detailData) {
						return this.detailData.statusName
					}
					return value
				case 'category': // 产品类别
					if (this.detailData) {
						return this.detailData.categoryName
					}
					return value
				case 'receivables_plan':
					if (this.detailData) {
						return this.detailData.planNum
					}
					return value
				case 'structure': // 部门
					if (isArray(value)) {
						return value.map(o => o.name).join('，')
					} else if (isObject(value)) {
						return value.name
					}
					return value
					case 'text': // 邮箱地址
						if (isArray(value)) {
							return value.map(o => o.name).join('，')
						} else if (isObject(value)) {
							return value.name
						}
						return value
				case 'location':
					return value.address || ''
				case 'position':
					if (isArray(value)) {
						return value.map(o => o.name).join('')
					} else {
						return value
					}
				case 'boolean_value':
					return Number(value) ? '是' : '否'
				case 'percent':
					return value + '%'
				case 'date_interval':
					return value.join('~')
				case 'select':
					if (isObject(item.setting[0]) && !isArray(value)) {
						// { name: '', value: '' }
						const findRes = item.setting.find(o => o.value === value)
						return findRes ? (findRes.name || value) : value
					}
					break
			}

			if ([
				'user',
				'single_user'
			].includes(item.formType)) {
				if (isArray(value)) {
					return value.map(o => o.realname).join('，')
				} else if (isObject(value)) {
					return value.realname || value.name
				}
			}

			if (isArray(value)) {
				if (value.length === 0) return ''
				if (typeof value[0] === 'string') return value.join('，')
				if (isObject(value[0])) {
					let key = item.formType + 'Name'
					if (value[0].hasOwnProperty(key)) {
						return value.map(o => o[key]).join('，')
					}
					return value
				}
			} else if (isObject(value)) {
				let key = item.formType + 'Name'
				if (value.hasOwnProperty(key)) return value[key]
				return value
			}
			return value
		},

		/**
		 * 是否为电话
		 */
		isTel(item) {
			if (item.formType === 'mobile') {
				return true
			} else if (!item.fieldName) {
				return false
			} else if (
				item.fieldName === 'mobile' ||
				item.fieldName === 'telephone'
			) {
				return true
			}
			return false
		},

		/**
		 * 判断是否为网址
		 * @param {Object} item
		 */
		isWebSite(item) {
			// #ifdef APP-PLUS | H5
			if (item.formType === 'website') return true
			return item.fieldName && item.fieldName === 'website'
			// #endif
			// eslint-disable-next-line no-unreachable
			return false
		},
	}
}
